import { isDate, isNumber } from '../regs/base'

/** 日期格式化
 * @param {Date} date Date类型 毫秒
 * @param {String} format yyyy-MM-dd hh:mm:ss t w 年-月-日 时:分:秒 毫秒 星期x
 * @returns {string}
 */
export const formatDate = (date = new Date(), format) => {
	if (!format || (!isDate(date) && !isNumber(date))) return ''

	// 毫秒处理
	if (isNumber(date)) date = new Date(date)

	var o = {
		'M+': date.getMonth() + 1,
		'd+': date.getDate(),
		'h+': date.getHours(),
		'm+': date.getMinutes(),
		's+': date.getSeconds(),
		'q+': Math.floor((date.getMonth() + 3) / 3),
		t: date.getTime(),
		w: '日一二三四五六'.charAt(date.getDay())
	}
	format = format.replace(/y{4}/, date.getFullYear()).replace(/y{2}/, date.getFullYear().toString().substring(2))
	for (var k in o) {
		var reg = new RegExp(k)
		format = format.replace(reg, match)
	}
	function match(m) {
		return m.length === 1 ? o[k] : `00${o[k]}`.substr(`${o[k]}`.length)
	}
	return format
}

/** 金额格式化，类似 123,456,789.23
 * @param {Number} amount 待格式化金额
 * @param {Number} decimal 需保留的小数位数
 * @returns {string}
 */
export const formatMoney = (amount, decimal = 0) => {
	if (!+amount) return '0' // 处理非数字
	amount = amount.toFixed(decimal) // 处理小数位数 & 转string
	const decimalPlaces = amount.split('.')[1] // 截取小数位
	const revArr = parseInt(amount).toString().split('') // 处理整数位
	let len = Math.floor(revArr.length / 3)
	revArr.length % 3 === 0 && len--
	for (var i = 0; i < len; i++) {
		// 插入分隔符，因为插入之后数组长度变长，需要每次插入都添加偏移位
		revArr.splice(-((i + 1) * 3 + i), 0, ',')
	}
	return revArr.join('') + (decimalPlaces ? `.${decimalPlaces}` : '')
}
